package com.wzcl.app.controller;


import com.wzcl.app.dao.model.UserGroup;
import com.wzcl.app.model.common.MyPage;
import com.wzcl.app.model.common.RVO;
import com.wzcl.app.model.dto.UserGroupDto;
import com.wzcl.app.model.vo.UserGroupVo;
import com.wzcl.app.service.UserGroupService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;
import java.util.stream.Collectors;

@Log4j2
@RestController
@RequestMapping("/userGroup")
@Api(value = "用户组管理controller", tags = {"用户组管理相关接口"})
public class UserGroupController {

    @Autowired
    private UserGroupService service;

    @PostMapping("/add")
    @ApiOperation("添加用户组")
    public RVO<UserGroupVo> addUserGroup(@RequestBody @Valid UserGroupDto userGroupDto){
        UserGroup userGroup = service.addUserGroup(userGroupDto);
        return RVO.success(UserGroupVo.create(userGroup));
    }

    @PostMapping("/del")
    @ApiOperation("删除用户组")
    public RVO<UserGroupVo> delUserGroup(@RequestBody UserGroupDto userGroupDto){
        UserGroup userGroup = service.delUserGroupById(userGroupDto.getId());
        return RVO.success(UserGroupVo.create(userGroup));
    }


    @PostMapping("/update")
    @ApiOperation("修改用户组")
    public RVO<UserGroupVo> updateUserGroup(@RequestBody @Valid UserGroupDto userGroupDto){
        UserGroup userGroup = service.updateUserGroup(userGroupDto);
        return RVO.success(UserGroupVo.create(userGroup));
    }

    @PostMapping("/get")
    @ApiOperation("查找用户组")
    public RVO<UserGroupVo> getUserGroup(@RequestBody UserGroupDto userGroupDto){
        UserGroup userGroup = service.getUserGroupById(userGroupDto.getId());
        if(userGroup != null){
            return RVO.success(UserGroupVo.create(userGroup));
        }
        return RVO.success(null);
    }

    @PostMapping("/getList")
    @ApiOperation("查找用户组List")
    public RVO<List<UserGroupVo>> getUserGroupList(@RequestBody UserGroupDto userGroupDto){
        List<UserGroup> list = service.getUserGroupList(userGroupDto);
        if(list != null && list.size()>0){
            return RVO.success(list.stream().map(UserGroupVo::create).collect(Collectors.toList()));
        }
        return RVO.success(null);
    }


    @PostMapping("/getPage")
    @ApiOperation("查找用户组Page")
    public RVO<List<UserGroupVo>> getUserGroupPage(@RequestBody UserGroupDto userGroupDto){
        MyPage<UserGroup> page = service.getUserGroupPage(userGroupDto);
        if(page != null && page.getContent().size()>0){
            return RVO.success( page.getContent().stream().map(UserGroupVo::create).collect(Collectors.toList()),page);
        }
        return RVO.success(null);
    }

    @PostMapping("/refresh")
    @ApiOperation("刷新用户组")
    public RVO<UserGroupVo> refreshUserGroup(@RequestBody UserGroupDto userGroupDto){
        UserGroup userGroup = service.refreshUserGroup(userGroupDto.getId());
        return RVO.success(UserGroupVo.create(userGroup));
    }
}
